// //假设一个传入AJAX的数据


function ajax(obj) {

    //obj一步到位
    let newObj = {
        method: obj.method || 'get',
        url: obj.url,
        boolean: obj.boolean !== false ? true : false,
        data: null,
        header: obj.header ? obj.header : null
    }

    if (obj.data) { //如果data里面有数据
        if (newObj.method == 'get') { //get请求
            newObj.data = pin(obj.data)
            newObj.url = obj.url + '?' + newObj.data
        } else { //post请求中send的参数会因为参数的格式而不同
            if (obj.header['content-type'] == 'application/x-www-form-urlencoded') { //true的话说明是表单格式
                newObj.data = JSON.parse(pin(obj.data))
            } else {
                newObj.data = JSON.stringify(obj.data)
            }
        }
    }

    //定义promise
    let p = new Promise((resolve, reject) => {
        //定义ajax
        //01-创建请求对象
        const xhr = new XMLHttpRequest()
            //02-配置链接信息
        xhr.open(newObj.method, newObj.url, newObj.boolean)
            //03-监听请求状态
        xhr.onreadystatechange = function() {
                if (xhr.readyState == 4 && xhr.status == 200) { //请求成功
                    let res = JSON.parse(xhr.responseText)
                    if (res.code == 0) {
                        resolve(res)
                    } else {
                        reject(res)
                    }
                }
            }
            //04-请求头
        if (newObj.header) { //有请求头的一定是Post
            for (let key in newObj.header) { //遍历头部的内容，因为请求头可能不止一个内容
                xhr.setRequestHeader(key, newObj.header[key])
            }
            xhr.send(newObj.data)
        } else {
            xhr.send()
        }
    })

    //将promise对象返回去
    return p
}

//拼接
function pin(objdata) {
    let str = ''
    for (let key in objdata) {
        str += `${key}=${objdata[key]}&`
    }
    return str.slice(0, str.length - 1)
}

export default ajax